package com.hedl.practice.diyJava.data.zoned_date_time.practise;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * 某航线从北京飞到纽约需要13小时20分钟，请根据北京起飞日期和时间计算到达纽约的当地日期和时间。
 */
public class StudyDate {
    public static void main(String[] args) {
        LocalDateTime departureAtBeijing = LocalDateTime.of(2019,9,15,13,0,0);
        int hours = 13;
        int minutes = 20;
        LocalDateTime arrivalAtNewYork= calculateArrivalAtNY(departureAtBeijing,hours,minutes);

        System.out.println(departureAtBeijing+"->"+arrivalAtNewYork);
        //test
        if (!LocalDateTime.of(2019,10,15,14,20,0)
                .equals(calculateArrivalAtNY(LocalDateTime.of(2019,10,15,13,0,0),13,20))){
            System.out.println("测试失败！");
        } else if (!LocalDateTime.of(2019, 11, 15, 13, 20, 0)
                .equals(calculateArrivalAtNY(LocalDateTime.of(2019, 11, 15, 13, 0, 0), 13, 20))) {
            System.out.println("测试失败！");
        }
    }

    /**
     * ZonedDateTime类中
     *          plusHours()是用来增加小时的方法
     *          plusMinutes()使用来增加分钟的方法
     *          plusYears()增加年份的
     *          plusMonths()增加月份的
     *          plusWeeks()增加周数的
     *          plusDays()增加天数
     *          plusSeconds()增加秒数
     *  withZoneSameInstant()转换时区的方法
     *  toLocalDateTime()转为本地化的方法
     *
     * @param departureAtBeijing
     * @param hours
     * @param minutes
     * @return
     */
    private static LocalDateTime calculateArrivalAtNY(LocalDateTime departureAtBeijing, int hours, int minutes) {
        /*ZonedDateTime zdt = departureAtBeijing.atZone(ZoneId.of("Asia/Shanghai"));
        ZonedDateTime zdt1 = zdt.plusHours(13).minusMinutes(20);
        ZonedDateTime zdt2 = zdt1.withZoneSameInstant(ZoneId.of("America/New_York"));
        departureAtBeijing = zdt2.toLocalDateTime();*/

//        System.out.println("时间1---"+departureAtBeijing);
        ZonedDateTime zdt = departureAtBeijing.plusHours(hours).plusMinutes(minutes).atZone(ZoneId.systemDefault());
//        System.out.println("时间2---"+zdt);
        ZonedDateTime zdt1 = zdt.withZoneSameInstant(ZoneId.of("America/New_York"));
//        System.out.println("时间3---"+zdt1);
//        System.out.println("本地化时间--"+zdt1.toLocalDateTime());
        return zdt1.toLocalDateTime();
    }
}
